🏠↩︎ De vuelta a la página principal del curso


Inicio

🚀 Objetivo de la unidad

Que el estudiante reconozca los conceptos básicos de programación y sus casos de uso prácticos básicos.


Nota importante: Los siguientes módulos prácticos son lineales.


💡 La función print() imprime el valor que contiene el objeto ubicado entre los paréntesis.
💡 n:y genera una serie de números consecutivos entre n y y.


2.1. Instanciando objetos con vectores

  • Con valores lógicos
a <- TRUE

mi_variable <- c(FALSE, TRUE)


La variable a guardará un vector lógico a partir del resultado del resultado de una operación lógica.

b <- 3 == 3

print(b)
## [1] TRUE


  • Con cadenas de caractéres
x <- "¡Hola, mundo!"

print(x)
## [1] "¡Hola, mundo!"


y <- c("2", "3", "dos", "tres")

print(y)
## [1] "2"    "3"    "dos"  "tres"


  • Con enteros
s <- 42L

print(s)
## [1] 42


t <- c(2L, 3L, NA)

print(t)
## [1]  2  3 NA


  • Con puntos flotantes (double)
i <- 42

print(s)
## [1] 42


j <- c(sqrt(2) ^ 2, 1, Inf)

print(t)
## [1]  2  3 NA


  • Con listas
ages <- list(22, 23, 22, 21, 25)

print(ages)
## [[1]]
## [1] 22
## 
## [[2]]
## [1] 23
## 
## [[3]]
## [1] 22
## 
## [[4]]
## [1] 21
## 
## [[5]]
## [1] 25


list_of_lists <- list("arroz", "pasta", list("manzanas", "kiwis", "uvas"), c("leche", "huevo", "mantequilla", 3))

print(list_of_lists)
## [[1]]
## [1] "arroz"
## 
## [[2]]
## [1] "pasta"
## 
## [[3]]
## [[3]][[1]]
## [1] "manzanas"
## 
## [[3]][[2]]
## [1] "kiwis"
## 
## [[3]][[3]]
## [1] "uvas"
## 
## 
## [[4]]
## [1] "leche"       "huevo"       "mantequilla" "3"


2.2. Conociendo a un objeto


Las siguientes funciones permiten evaluar si un vector es de un tipo específico.

is.logical(TRUE)
## [1] TRUE
is.character("¡Hola, mundo!")
## [1] TRUE
is.integer(42L)
## [1] TRUE
is.double(2)
## [1] TRUE
is.na(NA)
## [1] TRUE
is.nan(NaN)
## [1] TRUE
is.infinite(-Inf)
## [1] TRUE


typeof es una función que nos permite saber el tipo de vector que almacena un objeto.

typeof(x)
## [1] "character"


length es una función que nos permite saber el tamaño de un vector.

length(a)
## [1] 1


Para acceder al contenido de un vector en una posición en particular. Utilice [] y el índice de la posición de la que desea obtener el contenido.

print(y[1])
## [1] "2"

Puede acceder al contenido de varias posiciones utilizando un vector de índices.

print(y[1:2])
## [1] "2" "3"
print(y[c(1, 3)])
## [1] "2"   "dos"

De la misma forma, puede editar el contenido de un vector.

y[1:2] <- c(5, 6)
print(y)
## [1] "5"    "6"    "dos"  "tres"


2.3. Convirtiendo el tipo de un vector


Las siguientes funciones permiten convertir el tipo de un vector.

x <- "TRUE"
as.logical(x)
## [1] TRUE
x <- 1
as.character(x)
## [1] "1"
x <- "3"
as.numeric(x)
## [1] 3


2.4. Operaciones con vectores

El siguiente bloque de código multiplica dos objetos previamente instanciados guardando el valor resultante en una tercera variable.

a <- 1
factor_exp <- 300

valor_real <- a * factor_exp

print(valor_real)
## [1] 300


Instanciamos un vector.

x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)  


Recuerde que las operaciones se ejecutan por elemento.

x + 2
##  [1]  3  4  5  6  7  8  9 10 11 12


sqrt(x)
##  [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427
##  [9] 3.000000 3.162278


x * c(2, 4, 8, 10, 12)
##  [1]   2   8  24  40  60  12  28  64  90 120


x * c(2, 4, 2)
## Warning in x * c(2, 4, 2): longitud de objeto mayor no es múltiplo de la
## longitud de uno menor
##  [1]  2  8  6  8 20 12 14 32 18 20


x * c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
##  [1]   10   40   90  160  250  360  490  640  810 1000


Observe que algunas operaciones aritméticas se ejectutan de forma matricial.

sum(x)
## [1] 55
mean(x)
## [1] 5.5
median(x)
## [1] 5.5
min(x)
## [1] 1
max(x)
## [1] 10
sample(x, size=5)
## [1] 8 4 9 5 2


🏋 Ejercicio #1

  1. Cree un vector que contenga la numeración consecutiva de 1 a 50. Suponga que estas son la edades recolectadas en un censo de población en el poblado Z.
  2. y el factor de expansión de cada uno de los individuos censados en el poblado Z es de 3.5. Cree un objeto que guarde el valor de este factor de expansión.
  3. Calcule la media de edad de la población.


2.5. Condicionando

El siguiente bloque de código instancia un objeto con un vector unitario con valor 5, y después con una instrucción if evalúa si el valor del objeto es negativo. Si el valor del objeto es negativo, lo multiplica por -1.

num <- -5
if (num < 0) {
  print("El número es negativo.")
  
  print("Lo volveré positivo.")
  num <- num * -1 # Convierte por -1 para invertir su signo
  
  print("Ahora el número es positivo.")
}
## [1] "El número es negativo."
## [1] "Lo volveré positivo."
## [1] "Ahora el número es positivo."
print(num)
## [1] 5


El siguiente bloque de código es el mismo que el anterior, pero contiene una instrucción para aquellos casos en los que no se cumpla la condición inicial.

num <- 8
if (num < 0) {
  print("El número es negativo.")
  
  print("Lo volveré positivo.")
  num <- num * -1 # Convierte por -1 para invertir su signo
  
  print("Ahora el número es positivo.")
} else {
  print("Tu número siempre fue positivo.")
}
## [1] "Tu número siempre fue positivo."
print(num)
## [1] 8


🤸️ Ejercicio #2

  1. ¿Cuál será el valor de x después de ejecutar el siguiente código?
x <- 1
if (x == 1) {
  x <- 2
  if (x == 1) {
    x <- 3
  }
}
  1. Utilice instrucciones if y else para evaluar si la media de pobalación en el ejercicio anterior es mayor o igual que 30. En caso de que lo sea, imprima “La media de población es mayor o igual que 30.”, y en caso contrario, imprima el mensaje acorde.


2.6. Iterando

El siguiente bloque de código itera sobre todos los elementos de un vector e imprime el contenido de cada uno de estos.

mi_vector <- c(1, 2, 4, 5, 6, "siete", "ocho")
for (i in mi_vector) {
  print(i)
}
## [1] "1"
## [1] "2"
## [1] "4"
## [1] "5"
## [1] "6"
## [1] "siete"
## [1] "ocho"


🤾️ Ejercicio #3

  1. ¿Qué imprimirá el siguiente ciclo for?
mi_vector <- c(1, 2, 4, 5, 6)
for (i in mi_vector) {
  print(i + 1)
}
## [1] 2
## [1] 3
## [1] 5
## [1] 6
## [1] 7
  1. Imagine que le reportan que ha habido un error en el censo de población de Z: a todas las edades menor o igual a 30, les han sumado 1 año de edad. Utilice instrucciones for, if y else (en caso de ser necesario) para corregir el vector de edades que ya había almacenado.


2.7. Una primer función

El siguiente bloque de código equivale a una función que invierte el signo de un número.

invierte_signo <- function(x){
  x * -1
  
}
invierte_signo(-1)
## [1] 1
invierte_signo(2)
## [1] -2


🏄️ Ejercicio 4

  1. Cree un función que tome una muestra aleatoria de tamaño n del vector de edades corregidas del censo de población de Z y calcule su media, dado un factor de expansión e.
    Bonus: Verifique que n sea menor al tamaño de la población total de Z.